package com.whfc.fuum.dao;

import com.whfc.fuum.dto.SysRuleDTO;
import com.whfc.fuum.entity.SysRule;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface SysRuleMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(SysRule record);

    int insertSelective(SysRule record);

    SysRule selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(SysRule record);

    int updateByPrimaryKey(SysRule record);

    /**
     * 查询所有权限列表
     *
     * @param platform 权限平台类型
     * @return 权限列表
     */
    List<SysRuleDTO> selectAllRuleList(@Param("platform") Integer platform);

    /**
     * 查询子孙权限列表
     *
     * @param pid
     * @return
     */
    List<SysRuleDTO> selectDescendantRuleList(@Param("pid") Integer pid);

    /**
     * 启用
     *
     * @param ruleId
     * @return
     */
    int enableRule(@Param("ruleId") Integer ruleId);

    /**
     * 禁用
     *
     * @param ruleId
     * @return
     */
    int disableRule(@Param("ruleId") Integer ruleId);

    /**
     * 逻辑删除
     *
     * @param ruleId
     * @return
     */
    int logicDeleteById(@Param("ruleId") Integer ruleId);

    /**
     * 统计path
     *
     * @param path
     * @param platform
     * @return
     */
    SysRule selectByPath(@Param("path") String path, @Param("platform") Integer platform);

    /**
     * 统计code
     *
     * @param code
     * @param platform
     * @return
     */
    SysRule selectByCode(@Param("code") String code, @Param("platform") Integer platform);

    /**
     * 统计子节点数量
     *
     * @param pid
     * @return
     */
    int countByPid(@Param("pid") Integer pid);

    /**
     * 查询用户所有的权限
     *
     * @param userId
     * @param platform
     * @return
     */
    List<SysRuleDTO> selectUserAllRuleList(@Param("userId") Integer userId, @Param("platform") Integer platform);

    /**
     * 查询权限信息
     *
     * @param ruleIdList
     * @return
     */
    List<SysRuleDTO> selectRuleListByRuleIdList(@Param("ruleIdList") List<Integer> ruleIdList);
}